﻿using System;
using System.Globalization;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using bolsatrabajo.Dominio.NHIBERNATE;
using bolsatrabajo.Persistencia.NHIBERNATE;

namespace bolsatrabajo.Pruebas.NHIBERNATE
{
    [TestFixture]
    public class pruebaOfertanteNH
    {
        [Test]
        public void TestCrearOfertante()
        {
            OfertanteNH ofertanteNH = new OfertanteNH(); // Instanciando la clase a probar
            // Creando un objeto en memoria para luego persistirlo en la BD
            Ofertante ofertanteACrear = new Ofertante();
            ofertanteACrear.Ruc = "09903035";
            ofertanteACrear.RazonSocial = "garcia SERVICE";
            ofertanteACrear.Correo = "kathyg@garciaservice.com";
            ofertanteACrear.Contrasena = "654321";
            Ofertante ofertanteCreado = null; // Declarando el objeto que contendrá el registro creado en la BD
            Assert.DoesNotThrow(delegate // Asegurando que el "cuerpo" no lance excepciones
            {
                ofertanteCreado = ofertanteNH.Crear(ofertanteACrear); // Ejecutando el método de creación
            });
            Assert.AreEqual(ofertanteACrear.Correo, ofertanteCreado.Correo); // Asegurando que el código del alumno ya creado sea igual al código del alumno en memoria que solicité crear
        }
        [Test]
        public void TestObtenerOfertante()
        {
            String correoABuscar = "hugoto@garciaservice.com";
            OfertanteNH ofertanteNH = new OfertanteNH();
            Ofertante ofertanteBuscado = null;
            Assert.DoesNotThrow(delegate
            {
                ofertanteBuscado = ofertanteNH.Obtener(correoABuscar);
            });
            Assert.IsNotNull(ofertanteBuscado);
            Assert.AreEqual(correoABuscar, ofertanteBuscado.Correo);
        }
        [Test]
        public void TestEliminarOfertante()
        {
            String correoOfertante = "hhggfox@gmail.com";
            OfertanteNH ofertanteNH = new OfertanteNH();
            Ofertante ofertanteaEliminar = null;
            Assert.DoesNotThrow(delegate
            {
                ofertanteaEliminar=ofertanteNH.Obtener(correoOfertante);
                ofertanteNH.Eliminar(ofertanteaEliminar);
            });
            Assert.IsNotNull(ofertanteaEliminar);
            Assert.IsNull(ofertanteNH.Obtener(correoOfertante));
        }
        [Test]
        public void TestModificarOfertante()
        {
            OfertanteNH ofertanteNH = new OfertanteNH();
            Ofertante ofertanteAModificar = new Ofertante();
            ofertanteAModificar.Ruc = "0992464424";
            ofertanteAModificar.RazonSocial = "gonza SERVICE";
            ofertanteAModificar.Correo = "kathyg@garciaservice.com";
            ofertanteAModificar.Contrasena = "654321";
            ofertanteAModificar.Rubro = "INDUSTRIA";
            ofertanteAModificar.Ubicacion = "CALLAO";
            ofertanteAModificar.Contacto = "SRA YVETTE";
            Ofertante ofertanteModificado = null;
            Assert.DoesNotThrow(delegate
            {
                ofertanteModificado = ofertanteNH.Modificar(ofertanteAModificar);
            });
            Assert.AreEqual(ofertanteAModificar.Correo, ofertanteModificado.Correo);
        }

        [Test]
        public void TestListarOfertantesxRubro()
        {
            String rubroDeOfertante = "INDUSTRIA";
            OfertanteNH listaNH = new OfertanteNH();
            ICollection<Ofertante> listaobtenida = null;
            Assert.DoesNotThrow(delegate
            {
                listaobtenida = listaNH.ListarxRubro(rubroDeOfertante);
            });
            //CollectionAssert.IsNotEmpty(listaobtenida);
            Assert.Greater( listaobtenida.Count, 0 );
            foreach (Ofertante o in listaobtenida)
            {
                Console.WriteLine(o.Ruc + "|" + o.Rubro);
            }
        }

        [Test]
        public void TestListarOfertantesxRubroyUbicacion()
        {
            String rubroDeOfertante = "INDUSTRIA";
            String ubicacionDeOfertante = "CALLAO";
            OfertanteNH listaNH = new OfertanteNH();
            ICollection<Ofertante> listaobtenida = null;
            Assert.DoesNotThrow(delegate
            {
                listaobtenida = listaNH.ListarxRubroyUbicacion(rubroDeOfertante, ubicacionDeOfertante);
            });
            //CollectionAssert.IsNotEmpty(listaobtenida);
            Assert.Greater(listaobtenida.Count, 0);
            foreach (Ofertante o in listaobtenida)
            {
                Console.WriteLine(o.Ruc + "|" + o.Rubro + "|" + o.Ubicacion);
            }
        }

        [Test]
        public void TestObtenerxRazonyRuc()
        {
            String razonABuscar = "SERVICE";
            String rucABuscar = "09903031";
            OfertanteNH ofertanteNH = new OfertanteNH();
            Ofertante ofertanteBuscado = null;
            Assert.DoesNotThrow(delegate
            {
                ofertanteBuscado = ofertanteNH.ObtenerPorRazonSocialYRuc(razonABuscar,rucABuscar);
            });
            Assert.IsNotNull(ofertanteBuscado);
        }
    }
}